Soru & Cevap

Nesnenin touch aksiyonunu başka nesneye aktarma?

24.10.2017 - 04:33

Merhaba.. UITableView satırları içerisinde textview kullanıyorum.. Textviewlere bir sayfalık yazılar yerleştirerek adeta bir kitap gibi bu listenin akmasını sağlıyorum. Sorunum şu ki, textviewdeki metni uzunbasma ile seçtirip uzunmenüyü açamıyorum.. cell'in isUserInteractionEnabled = true yaptığımda uzunmenü açılıyor bu seferde o satır üzerinde parmağı aşağı yukarı yaptığımızda tablonun scrollu çalışmıyor.. textview'in touchesBegan fonksiyonundan textiew'e dokunulduğuğu farkedip cell'in isUserInteractionEnabled = false yaptığımda parmağı kaldırıp tekrar dokunduğumda başa dönmüş gibi oluyoruz yani scroll çalışıyor fakat textview'e o anda uzun basma yapamıyorum.. 

Tablonun scrollunun durduğu anı scrollViewDidEndDragging fonksiyonu ile farkedip görünürdeki cell'lerin isUserInteractionEnabled özellğini false yapabilirim.. daha sonrada textview'deki touchbegan ve touchmoved fonksiyonlarını override ederek çalışma yapabilirim, fakat sorun şurdaki touchmoved fonksiyonundaki aksiyonu tabloview'e aktarma hiç kesinti yaşatmadan scrollu çalıştırmam gerekiyor.. 

Daha kısa bir anlatımla bir viewdeki aksiyonu başka viewe anlık olarak nasıl aktarırım? Androidde dispatchtouchevent isimli bir fonksiyon var, bunun swift versiyonunu aramaktayım..

 

 

 

 

10 Görüntülenme

1 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user gmyucalfarukeren
gmyucalfarukeren
22.02.2023 - 12:56

Merhaba! Touch olayları bir görünüme (view) özgüdür ve başka bir görünüme aktarılamazlar. Ancak, bir görünümde touch olaylarını işleyen fonksiyonlarda, olayı başka bir görünümdeki işleyici fonksiyona yönlendirebilirsiniz

UITableView'de, bir hücredeki textview'e dokunulduğunda touch olayları önce textview'in touch olay işleyici fonksiyonlarına iletilir. Bu nedenle, textview'deki touch olaylarını işleyen fonksiyonlarda, olayları UITableView'deki bir fonksiyona yönlendirebilirsiniz

Örneğin, textview'in touchesBegan fonksiyonunda aşağıdaki kodu kullanarak, touch olaylarını tableView'deki bir fonksiyona aktarabilirsiniz

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    super.touchesBegan(touches, with: event)
    

    if let tableView = self.superview as? UITableView {
        tableView.touchesBegan(touches, with: event)
    }
}

Benzer şekilde, textview'in touchesMoved fonksiyonunda da, touch olaylarını tableView'deki bir fonksiyona aktarabilirsiniz

 

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    super.touchesMoved(touches, with: event)
    
   
    if let tableView = self.superview as? UITableView {
        tableView.touchesMoved(touches, with: event)
    }
}